#define E_UART1
#include "H/UART1.H"

/*****************************************************
*函数名称：void UART1_Init(uint R_UART1_BPS)
*函数功能：串口1初始化
*入口参数：uint R_UART1_BPS 串口波特率
          OSCD=2T  波特率范围7813 ~115200bsp  
          OSCD=4T  波特率范围3907 ~115200bsp		（默认）
          OSCD=8T  波特率范围1954 ~115200bsp
          OSCD=16T 波特率范围 977 ~115200bsp
*出口参数：void
*****************************************************/
void UART1_Init(ulong R_UART1_BPS)
{
    uint    i=0;
    #if     D_OSCD==1
    i=((32>>1)*1000000L/R_UART1_BPS)-1;
    #elif   D_OSCD==2
    i=((32>>2)*1000000L/R_UART1_BPS)-1;
    #elif   D_OSCD==3	
    i=((32>>3)*1000000L/R_UART1_BPS)-1;
    #elif   D_OSCD==4
    i=((32>>4)*1000000L/R_UART1_BPS)-1;
    #endif
    //波特率公式=CLKPER/(UATXSRE+1)；CLKPER=RC32M/OSCD
    UAT1SREL=(uchar)i;
    UAT1SREH=(uchar)(i>>8); //波特率	

    UART1_TX_OUT;       //TX输出口
    UART1_TX=1;         //TX输出高;  
    UART1_TX_OD_OFF;    //TX开漏不使能
    UART1_TX_PH_OFF;    //TX上拉不使能
    UART1_TX_PD_OFF;    //TX下拉不使能

    UAT1CON=UAT1EN_EN|UAT1SM(D_UAT1SM)|UAT1TB8(0);//UART使能|8位异步方式|第9位清0
    UAT1TIE=1;          //TX使能中断

    R_UART1_SEND_LENGTH=0; 
    F_UART1_SEND=0;//=1发送完成

}

/*****************************************************
*函数名称：void UART1_IOSET()
*函数功能：串口IO端口选择
*入口参数：void
*出口参数：void
*****************************************************/
void UART1_IOSET()
{        
    MAP0 &=~0x0C;
    MAP0 |=UAT1TXM(D_UART1_TX);
    UART1_TX_OUT;       //TX输出口
    UART1_TX=1;         //TX输出高;  
    UART1_TX_OD_OFF;    //TX开漏不使能
    UART1_TX_PH_OFF;    //TX上拉不使能
    UART1_TX_PD_OFF;    //TX下拉不使能

    UAT1CON=UAT1EN_EN|UAT1SM(D_UAT1SM)|UAT1TB8(0);//UART使能|8位异步方式|第9位清0
    UAT1TIE=1;          //TX使能中断
//    EA=1;               //全局中断使能 
}

/*****************************************************
*函数名称：void UART1_MULTIBYTE_SEND(uchar *P_DATA,uchar R_LENGTH)
*函数功能：串口多字节发送
*入口参数：uchar *P_DATA 发送数据首地址
          uchar R_LENGTH 发送数据长度
*出口参数：void
*****************************************************/
void UART1_MULTIBYTE_SEND(uchar *P_DATA,uchar R_LENGTH)
{
    P_UART1_SEND_DATA=P_DATA;
    UAT1SBUF=*P_UART1_SEND_DATA++;
    R_UART1_SEND_LENGTH=R_LENGTH-1;
    F_UART1_SEND=0;      
}
/*****************************************************
*函数名称：void UART1_TX_INT()
*函数功能：串口发送中断执行函数
*入口参数：void
*出口参数：void
*****************************************************/
void UART1_TX_INT()
{    
    if(R_UART1_SEND_LENGTH==0)
    {
       //数据发送完成
        F_UART1_SEND=1;
    } 
    else
    {
        UAT1SBUF=*P_UART1_SEND_DATA++;
        R_UART1_SEND_LENGTH--;
    } 
}

